# 函数
# ⼀个函数完成两个数1和2的加法运算，如何书写程序？
def sum(a, b):
    """
    函数的注释
    :param a: 
    :param b: 
    :return: 
    """
    return a + b


print(sum(10, 20))

#
help(sum)
print('-----------------testA-----------------------------')


# 局部变量在函数体内部,外包不能访问
def testA():
    a = 1


# print(a)
a = 10


def testB():
    # 这个修改不了全局变量,是在方法内部定义了一个局部变量罢了
    a1 = 20
    # global 声明这个是全局变量
    global a
    a = 30
    print(a)


def testC():
    print(a)


testB()
testC()


# 返回值多个
def return_multi():
    return 1, 2, 3, 4


result = return_multi()
print(type(result))
print(result)

print('--------------函数的参数-------------------')


# 函数的参数
def user_info(name, age, gender):
    print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')


user_info('TOM', 20, '男')
user_info(name='Tom', age=10, gender='女')
# 如果关键字参数的话,需要注意,前面关键字可以省略,后面的不行
user_info('Tom', 10, gender='女')
print()
print('-------------缺省参数--------------------')


# 位置参数需要在默认参数前面,包括定义和调用都是这样
def user_info(name, age, gender='男'):
    print(f'名字:{name} ,年龄:{age},性别: {gender}')


user_info('TOM', 200)
user_info('TOM', 200, '女')
print()
print('--------------不定长参数-------------------')


# 通过 *args,包裹位置传递
def user_info(*args):
    print(args)


user_info('TOM')
user_info('TOM', 200)


# **kwargs 包裹关机中传递
def user_info1(*args, **kwargs):
    print(args)
    print(kwargs)


user_info1('Tom', 200, key='value', key2='value2')
print()
print('---------------拆包,交互变量值------------------')
# 元组,取出的是值,接收参数个数如果不一致会报错
num1, num2 = (100, 200)
print(num1)
print(num2)
# 字典 拆包,取出的是key,接收参数个数如果不一致会报错
a, b = {'key': 'value', 'key2': 'value2'}
print(a)
print(b)
#  
print('----------------引⽤  -----------------')
a = 1
b = 1
# id 为地址标识
print(id(a))
print(id(b))
c = 1
print(id(c))
# 列表
aa = [10, 20]
bb = [10, 20]
print(id(aa))
bb = aa
bb.append(10)
print(aa)
print(id(bb))
# int 计算后id值不同
# 列表:计算前后id值相同

print('----------------可变,不可变类型  -----------------')
# 可变类型:字典,集合.列表
# 不可变类型:str,int,float,元组
print()
print()
print()
print('---------------------------------')
print()
print('---------------------------------')
print()
print('---------------------------------')
print()
